package com.leigq.basaltools.util;

import org.springframework.util.AlternativeJdkIdGenerator;
import org.springframework.util.IdGenerator;

import java.security.SecureRandom;
import java.util.UUID;


/**
 * UUID 工具
 * <br/>
 * 使用 {@link AlternativeJdkIdGenerator} 代替 jdk 的 {@link UUID}
 * <br/>
 * 它使用了 {@link SecureRandom} 作为种子，来替换调用 {@link UUID#randomUUID()}。它提供了一个更好、更高性能的表现。
 *
 * @author leigq
 */
public abstract class UUIDUtils {

    /**
     * 获取 UUID（36位）
     *
     * @return the string
     */
    public static String genId() {
        return Holder.ID_GENERATOR.generateId().toString();
    }

    /**
     * 获取无符号 UUID（32位）
     *
     * @return the string
     */
    public static String genUnsignedId() {
        return genId().replace("-", "");
    }


    /**
     * 使用静态内部类实现单例模式获取 <code>IdGenerator</code> 实例，线程安全。
     */
    private static class Holder {
        static final IdGenerator ID_GENERATOR = new AlternativeJdkIdGenerator();
    }

}
